home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / asms.arc / RANDOM.ASM < prev    next >
Encoding:
Assembly Source File  |  1987-09-07  |  6.1 KB  |  359 lines

  1.     org 0
  2.         b go
  3.     org 0FF0H
  4.     dw 1365
  5.         org 10H
  6. sine:    equ 0
  7. one:    equ 1
  8. freq:    equ 2
  9. phase:    equ 3
  10. maskl:    equ 6
  11. mask:    equ 7
  12. sinx:    equ 8
  13. cosx:    equ 9
  14. mone:    equ 11
  15. wkph:   equ 13
  16. masko:  equ 14
  17. mps:    equ 15
  18. siny:    equ 17
  19. mpc:    equ 18
  20. cosy:    equ 21
  21. cosine: equ 19
  22. coph:    equ 20
  23. bit:    equ 4
  24. sintbl: dw      0  ; coarse sine table
  25.        dw    804
  26.        dw   1607
  27.        dw   2410
  28.        dw   3211
  29.        dw   4011
  30.        dw   4807
  31.        dw   5601
  32.        dw   6392
  33.        dw   7179
  34.        dw   7961
  35.        dw   8739
  36.        dw   9511
  37.        dw  10278
  38.        dw  11038
  39.        dw  11792
  40.        dw  12539
  41.        dw  13278
  42.        dw  14009
  43.        dw  14732
  44.        dw  15446
  45.        dw  16150
  46.        dw  16845
  47.        dw  17530
  48.        dw  18204
  49.        dw  18867
  50.        dw  19519
  51.        dw  20159
  52.        dw  20787
  53.        dw  21402
  54.        dw  22004
  55.        dw  22594
  56.        dw  23169
  57.        dw  23731
  58.        dw  24278
  59.        dw  24811
  60.        dw  25329
  61.        dw  25831
  62.        dw  26318
  63.        dw  26789
  64.        dw  27244
  65.        dw  27683
  66.        dw  28105
  67.        dw  28510
  68.        dw  28897
  69.        dw  29268
  70.        dw  29621
  71.        dw  29955
  72.        dw  30272
  73.        dw  30571
  74.        dw  30851
  75.        dw  31113
  76.        dw  31356
  77.        dw  31580
  78.        dw  31785
  79.        dw  31970
  80.        dw  32137
  81.        dw  32284
  82.        dw  32412
  83.        dw  32520
  84.        dw  32609
  85.        dw  32678
  86.        dw  32727
  87.        dw  32757
  88.        dw  32767
  89. fines:  dw      0  ; fine tuning table
  90.        dw     12
  91.        dw     25
  92.        dw     37
  93.        dw     50
  94.        dw     62
  95.        dw     75
  96.        dw     87
  97.        dw    100
  98.        dw    113
  99.        dw    125
  100.        dw    138
  101.        dw    150
  102.        dw    163
  103.        dw    175
  104.        dw    188
  105.        dw    201
  106.        dw    213
  107.        dw    226
  108.        dw    238
  109.        dw    251
  110.        dw    263
  111.        dw    276
  112.        dw    289
  113.        dw    301
  114.        dw    314
  115.        dw    326
  116.        dw    339
  117.        dw    351
  118.        dw    364
  119.        dw    376
  120.        dw    389
  121.        dw    402
  122.        dw    414
  123.        dw    427
  124.        dw    439
  125.        dw    452
  126.        dw    464
  127.        dw    477
  128.        dw    490
  129.        dw    502
  130.        dw    515
  131.        dw    527
  132.        dw    540
  133.        dw    552
  134.        dw    565
  135.        dw    578
  136.        dw    590
  137.        dw    603
  138.        dw    615
  139.        dw    628
  140.        dw    640
  141.        dw    653
  142.        dw    665
  143.        dw    678
  144.        dw    691
  145.        dw    703
  146.        dw    716
  147.        dw    728
  148.        dw    741
  149.        dw    753
  150.        dw    766
  151.        dw    779
  152.        dw    791
  153. finec:     dw   32767
  154.        dw   32766
  155.        dw   32766
  156.        dw   32766
  157.        dw   32766
  158.        dw   32766
  159.        dw   32766
  160.        dw   32766
  161.        dw   32766
  162.        dw   32766
  163.        dw   32766
  164.        dw   32766
  165.        dw   32766
  166.        dw   32766
  167.        dw   32766
  168.        dw   32766
  169.        dw   32766
  170.        dw   32766
  171.        dw   32766
  172.        dw   32766
  173.        dw   32766
  174.        dw   32765
  175.        dw   32765
  176.        dw   32765
  177.        dw   32765
  178.        dw   32765
  179.        dw   32765
  180.        dw   32765
  181.        dw   32765
  182.        dw   32764
  183.        dw   32764
  184.        dw   32764
  185.        dw   32764
  186.        dw   32764
  187.        dw   32764
  188.        dw   32764
  189.        dw   32763
  190.        dw   32763
  191.        dw   32763
  192.        dw   32763
  193.        dw   32763
  194.        dw   32762
  195.        dw   32762
  196.        dw   32762
  197.        dw   32762
  198.        dw   32762
  199.        dw   32761
  200.        dw   32761
  201.        dw   32761
  202.        dw   32761
  203.        dw   32760
  204.        dw   32760
  205.        dw   32760
  206.        dw   32760
  207.        dw   32759
  208.        dw   32759
  209.        dw   32759
  210.        dw   32759
  211.        dw   32758
  212.        dw   32758
  213.        dw   32758
  214.        dw   32758
  215.        dw   32757
  216.        dw   32757
  217. go:    ldpk 0
  218.     larp 0
  219.     lark ar0,15
  220.     lack one
  221.     sacl one
  222.     sacl bit
  223.     lac one,11
  224.     sacl masko
  225.     zac
  226.     sub one
  227.     sacl mone  ; make and store minus one
  228.     lac one,14
  229.     sub one
  230.     sacl mask  ; make and store mask for modulo 16384 phase arithmetic
  231.     lac one,6
  232.     sub one
  233.     sacl maskl ; make and store fine part of address mask;
  234.     zac
  235.     sacl phase
  236.     lac one,8
  237.     sub one
  238.     sacl freq
  239.     lac freq,4
  240.     tblr freq
  241. wait:    bioz fire    ; is it time for a new sample    
  242.     b wait       ; nope go wait in the corner
  243. fire:    out sine,pa4    ; send it out here so that timing is maintained
  244.              ; as the following routines have a variable length
  245.     banz donch
  246.     lark ar0,15
  247.     in sine,pa3
  248.     lac sine,4
  249.     sub one,15
  250.     bgz posbit
  251.     lac mone
  252.     sacl bit
  253.     b donch
  254. posbit: lac one
  255.     sacl bit
  256. donch:    lack one
  257.     sacl mps
  258.     sacl mpc
  259.     lac phase,0
  260. a:    sacl wkph  ;  store a working copy
  261.     lac wkph,4
  262.     subh one
  263.     blz getem  ;  is it in a quadrant bigger than first?
  264.     subh one
  265.     bgez thfr; is it in a quadrant greater than two?
  266.     lac 1,13  ;  nope so load pi
  267.     sub wkph  ;  subtract phase so that it maps back into 1st quad
  268.     sacl wkph ; store
  269.     lac mone  ; load -1
  270.     sacl mpc  ; store it in the cosine multiplier
  271.     b getem   ; go read tables
  272. thfr:    lac mone  ; multiplier for bottom half
  273.     sacl mps  ; store
  274.     lac wkph  ; 
  275.     sub one,13 ; map angle back to  upper half and go do it again
  276.     b a;
  277. getem:    lac wkph,10
  278.     sach coph
  279.     lack sintbl
  280.     add coph
  281.     tblr sinx
  282.     lac one,6
  283.     sub coph
  284.     sacl coph
  285.     lack sintbl
  286.     add coph
  287.     tblr cosx
  288.     lac wkph
  289.     and maskl
  290.     sacl coph
  291.     lack fines
  292.     add coph
  293.     tblr siny
  294.     lack finec
  295.     add coph
  296.     tblr cosy
  297.     zac
  298.     lt sinx
  299.     mpy cosy
  300.     lta siny
  301.     mpy cosx
  302.     apac
  303.     sach sine
  304.     lac 1,12
  305.     sub wkph
  306.     sacl wkph
  307.     lac wkph,10
  308.     sach coph
  309.     lack sintbl
  310.     add coph
  311.     tblr sinx
  312.     lac one,6
  313.     sub coph
  314.     sacl coph
  315.     lack sintbl
  316.     add coph
  317.     tblr cosx
  318.     lac wkph
  319.     and maskl
  320.     sacl coph
  321.     lack fines
  322.     add coph
  323.     tblr siny
  324.     lack finec
  325.     add coph
  326.     tblr cosy
  327.     zac
  328.     lt sinx
  329.     mpy cosy
  330.     lta siny
  331.     mpy cosx
  332.     apac
  333.     sach cosine
  334. mult:    lt mps
  335.     mpy sine
  336.     pac
  337.     sacl sine
  338.     mpy cosine
  339.     pac
  340.     sacl cosine
  341.     lt mpc
  342.     mpy cosine
  343.     pac
  344.     sacl cosine
  345.     lt cosine
  346.     mpy bit
  347.     pac
  348.     sacl cosine
  349.     lac cosine,5  ; move top twelve bits into high order word
  350.     addh masko ; add offset for ADC format;
  351.     sach sine,0  ; store output value
  352.     lac phase   ; get ready to add freq (measured in phase rotation
  353.             ; per sample)
  354.     add freq   ; add phase rotation
  355.     and mask    ; do mod 16384 arithmetic
  356.     sacl phase  ; store it
  357.     b wait        ; go output and then do it again
  358.     end
  359.